package com.asa.imgs;

/* 读写图像文bai件 */
import javax.swing.JOptionPane;

import com.asa.imgs.jwt.GraphicsDemo;

import java.io.*;

public class FileRW {
	
	
	public static BITMAPINFO decode_BMP(String path) throws IOException {
		
		
		
//		1、打开BMP文件时，我们这里选择使用dataInputstream 读取一个最常见的24位真彩色BMP图片
		// 创建文件输入流  
		java.io.FileInputStream fis = new java.io.FileInputStream(path);  
		// 将文件流包装成一个可以写基本数据类型的输出流  
		java.io.DataInputStream dis = new java.io.DataInputStream(fis); 
		
		
//		2、读入BMP头文件的基本信息
		int bflen=14;                              
		byte bf[]=new byte[bflen];               
		dis.read(bf,0,bflen); //读取14字节BMP文件头  
		
		
//		3、读入位图信息头
		int bilen=40;                    
        byte bi[]=new byte[bilen];  
        dis.read(bi,0,bilen);//读取40字节BMP信息头  
              
         // 获取一些重要数据  
         int image_width=ChangeInt(bi,7);               //源图宽度  

         System.out.println("宽:"+image_width);  
           
         int image_heigh=ChangeInt(bi,11);         //源图高度  
         System.out.println("高:"+image_heigh);  
                                                            //位数  
         int nbitcount=(((int)bi[15]&0xff)<<8) | (int)bi[14]&0xff;  
         System.out.println("位数:"+nbitcount);  
                                                            //源图大小  
         int nsizeimage=ChangeInt(bi,23);  
         System.out.println("源图大小:"+nsizeimage); 
		
         
         
         BITMAPINFO bitmapinfo = new BITMAPINFO(image_width, image_heigh,dis);
         
         
//         int[][][] showRGB24 = bitmapinfo.showRGB24(dis);
         

		return bitmapinfo;
	}
	
	
	
	public static void main(String[] args) throws IOException {
		BITMAPINFO bitmapinfo = decode_BMP("E:\\asa.bmp");
		
		
 		GraphicsDemo myGraphicsFrame = new GraphicsDemo(bitmapinfo.getImageR(), bitmapinfo.getImageG(), bitmapinfo.getImageB()
 				, bitmapinfo.getImage_width(),bitmapinfo.getImage_heigh());

		
	}
	
	
	
	
	
	
	//转成int  
	public static int ChangeInt(byte[] bi,int start){  
	    return (((int)bi[start]&0xff)<<24)                  
	            | (((int)bi[start-1]&0xff)<<16)  
	            | (((int)bi[start-2]&0xff)<<8)  
	            | (int)bi[start-3]&0xff;  
	}
	
	

}
